#!/bin/bash

# 该脚本用于列出系统中所有的用户账户
# 主要实现方法:
# 1. 使用cat读取/etc/passwd文件,通过管道组合多个命令过滤和格式化输出
# 2. 使用awk直接处理/etc/passwd文件
# 3. 使用getent命令获取用户信息

# 方法1:使用管道组合命令
list_users_pipe() {
    cat /etc/passwd | grep -v sbin | grep sh | sort | cut -d: -f1 | column
}
export -f list_users_pipe

# 方法2:使用awk命令
list_users_awk() {
    awk -F: '$7 ~ /sh$/ && $0 !~ /sbin/ {print $1}' /etc/passwd | sort | column
}
export -f list_users_awk

# 方法3:使用getent命令
list_users_getent() {
    getent passwd | awk -F: '$7 ~ /sh$/ && $0 !~ /sbin/ {print $1}' | sort | column
}
export -f list_users_getent

# 主函数:测试所有方法
main() {
    echo "=== 方法1:使用管道组合命令 ==="
    list_users_pipe

    echo -e "\n=== 方法2:使用awk命令 ==="
    list_users_awk

    echo -e "\n=== 方法3:使用getent命令 ==="
    list_users_getent
}

# 检查脚本是否被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  main "$@"
fi
